package itheima05;

import java.io.*;
import java.util.ArrayList;

/*
    集合的序列化和反序列化
        序列化的步骤
            1.创建集合对象,存储多个Person对象
            2.创建字节输出流OutputStream类的子类FileOutputStream对象fos,绑定目标文件
            3.创建ObjectOutputStream类的对象oos,传递fos
            4.ObjectOutputStream类的对象oos调用writeObject方法,向文件中写出对象
            5.关闭流,释放资源
        反序列化的步骤
            1.创建字节输入流InputStream类的子类FileInputStream对象fis,绑定源文件
            2.创建ObjectInputStream类的对象ois,传递fis
            3.ObjectInputStream类的对象ois调用readObject方法,从文件中读出一个对象
            4.关闭流,释放资源
 */
public class Demo06WriteObjectList {
    public static void main(String[] args) throws Exception {
        //writeList2File();
        readListFromFile();
    }
    //从文件读取出List集合
    private static void readListFromFile() throws Exception {
        //1.创建字节输入流InputStream类的子类FileInputStream对象fis,绑定源文件
        //2.创建ObjectInputStream类的对象ois,传递fis
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("day12\\list.txt"));

        //3.ObjectInputStream类的对象ois调用readObject方法,从文件中读出一个对象
        ArrayList<Person> list = (ArrayList<Person>)ois.readObject();

        //4.关闭流,释放资源
        for (Person p : list) {
            System.out.println(p);
        }
        ois.close();
    }

    //写出List集合到文件
    private static void writeList2File() throws Exception {
        //1.创建集合对象,存储多个Person对象
        // 创建 学生对象
        Person p1 = new Person("老王", 18);
        Person p2 = new Person("老张", 28);
        Person p3 = new Person("老李", 38);

        ArrayList<Person> arrayList = new ArrayList<>();
        arrayList.add(p1);
        arrayList.add(p2);
        arrayList.add(p3);

        //2.创建字节输出流OutputStream类的子类FileOutputStream对象fos,绑定目标文件
        //3.创建ObjectOutputStream类的对象oos,传递fos
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("day12\\list.txt"));

        //4.ObjectOutputStream类的对象oos调用writeObject方法,向文件中写出对象
        oos.writeObject(arrayList);

        //5.关闭流,释放资源
        oos.close();
    }
}
